home *** CD-ROM | disk | FTP | other *** search
- (defvar *default-db-name* (expand-file-name "~/.xemacs/lisp-file-database")
- "Default location of the database")
-
- (defun build-lisp-file-db (&optional db-name path rebuild)
- "Create a database of all lisp files in the directories given by PATH.
- DB-NAME is the database name, defaulting to *default-db-name*
- PATH is a list of directories to search, defaulting to load-path.
- REBUILD "
- (let ((path (or path load-path))
- (db (open-database (or db-name *default-db-name*) nil nil "rw+")))
- ;; For each entry in path, find all files in it and put them in
- ;; the database.
- (dolist (dir path)
- (dolist (file (directory-files dir t nil t t))
- ;; Separate the file name and the directory. The key is the
- ;; filename, and the value is the whole pathname. However, if
- ;; the key already exists, DON'T put that entry in. We want
- ;; things that occur first in load-path to override entries
- ;; later in load-path
- (let ((fname (file-name-nondirectory file)))
- (put-database fname file db nil))))))
-
- (defun show-lisp-db (&optional db-name)
- (let ((db (open-database (or db-name *default-db-name*) nil nil "r"))
- (entries '()))
- (map-database #'(lambda (key val)
- (push (cons key val) entries))
- db)
- (nreverse entries)))
-
- (defun lookup-lisp-file-db (file &optional db-name)
- (let ((name (file-name-nondirectory file))
- (db (open-database (or db-name *default-db-name*) nil nil "r")))
- (do* ((ext '("" ".elc" ".el") (rest ext))
- (entry (get-database (concat name (first ext)) db)
- (get-database (concat name (first ext)) db)))
- ((or entry (null ext)) entry)
- ())))
-
-